跳至主要内容

Request/Selenium

來點自己的小工具吧(我大爬蟲篇)

Request/Selenium Fan Kang Ting


還記得Axios?​

自家講義

let url="..."
let config={
user:"Little fish周咏陞"
spydog:true
}
this.axios.post(url,config)
.then((res)=>console.log(res.data))
.catch((error)=>console.log(error))

當然Axios適用於JavaScript上黑​

那同樣今天要用的請求工具適用在Python上(Request/Selenium)


補充:事實上在使用JSON格式的資料時要先解析/字串化=>

  • 解析 JSON.parser(JSON本人)
  • 字串化 JSON.stringfy(JSON本人)

你是不是想說之前在實作的時候明明都不需要用到他阿 我看都沒看過 不!!!


那是因為AXIOS這個Module 的資料會自動轉換 方便多了


建立觀念​

參考資料 關於httprequest 簡單來說你從瀏覽器看到網頁是需要使用GET Request才能看到的


認識一下常見的Http Method​

比如我們常在建立資料Router時常見的CRUD 分別代表POST,GET,PUT,DELETE 各種http method 其中POST(新增)跟PUT(修改)是可以夾帶參數的 通常我們會把參數寫成JSON config


備註UPDATE​

CRUD的U(update) 可以是PUT或是PATCH 通常意義上 PUT是指大範圍的UPDATE(比如整組資料修改) PATCH指小範圍的UPDATE(比如修改某個欄位修改)


你可能會覺得? 為甚麼不都用POST就好​

因為在Web Service後端設計上,通常我們要操作Model(資料模型)的使用方法會寫在同一個Class(類別)上


假如都使用POST去來進行UPDATE會發生甚麼事情呢?​
  1. 你必須建立另一個Class
  2. 建立額外的路由(Controller/Router)
  3. 程式碼不簡潔(忌諱)
  4. API代理問題
  5. 還有很多問題 這裡就不多說

Http status code​

蝦 沒聽過?! 不可能 至少你有看過


範例​

Google掛掉的時候 你就會看到了 黑對 404(No Found)就是其中之一


Staus Code概欄​


常見 statuscode​


額外介紹 Postman​

後端測試的好捧由 Link


了解了嗎? 正題開始​


安裝Requests 與Selenium​

這裡順便提一下pipenv

pip3 install pipenv #安裝pipenv
mkdir request_train #建立專案資料夾
cd requset_train
pipenv install #pipenv初始化專案資料夾
pipenv install requests #用pipenv install 即可安裝至Local
pipenv install selenium
pipenv install webdriver-manager

建立main. py​

順便提一下我們主程式的進入點 讓你的main.py長這樣

import requests
from selenium import webdriver

def main():
pass
#程式進入點
if __name__ =="__main__":
main()

使用基本功能​

import requests
from selenium import webdriver
from bs4 import BeautifulSoup#注意這個 pipenv install bs4
def main():
url="https://www.ptt.cc/bbs/MobileComm/index.html"#需要操作的網址
r = requests.get(url) #將網頁資料GET下來
soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser 這裡有使用BeautifulSoup 套件大家也可以安裝看看 雖然我平常不用
sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel
for s in sel:
print(s["href"], s.text)

#程式進入點
if __name__ =="__main__":
main()

算了還是請大家裝一下 bs4好了​

pipenv install bs4

當然前面的範例只是GET 當然其他方法也適用​

假設我使用 需要夾帶參數的POST

payload={ #須送之參數
'from':'/bbs/Gossiping/index.html',
'yes':'yes'
}
requests.post("https://www.ptt.cc/ask/over18",data=payload) #將參數寫至data

阿這有甚麼厲害的嗎​


答案 沒有​

不過好玩的來了


Selenium​


啥東西?​

他可以模擬你瀏覽器的一切操作 也就是人家說的爬蟲腳本機器人的重要製作工具之一


使用他前 需要把電腦上的瀏覽器更新到最新(建議)​

並且下載Web driver (模擬瀏覽器的引擎) Chrome Driver引擎載點 找到你適合得版本


將你的Python File跟Chrome Dirver放在同一目錄下(或者設定路徑)​

操作範例

# !/usr/bin/python
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import Select,WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import io
import time
drivePath="C:\\Users\cxz12\Downloads\chromedriver.exe"#chromedriver path

browser=webdriver.Chrome()#open browser


for i in range(0,1000):
if(i<100):
if(i<10):
i=("00"+str(i))
else:
i=("0"+str(i))
url="http://140.125.95.10/term1102/network/homework/doc/p6.docx"+str(i)+".doc"
# url="http://140.125.95.10/term1101/phpdb/practice/doc/p14"+str(i)+".doc"
browser.get(url)

就這樣而已? 你錯了還可以搞很多東西​

就交給各位探索拉